// testModule

/*
         默认情况下exports和module.exports指向同一个对象
         当直接给exports赋值（exports={}）时，两个将不指向同一对象

 */
/* //? =======================================================================================================

//module.exports对象上挂载
module.exports.name = '坤坤'

//向exports对象上挂载userName属性和seyHi方法
//这个直接赋值会改变指向！达咩！
exports = {
    userName: '莉莉',
    sayHello() {
        console.log('Hello')
    },
}
//! 上面输出{ name: '坤坤'}

    // 因为exports = {}改变了指向
    //     a={}//开始的对象
    //     b=a//module.exports
    //     c=a//exports
    //     这是最开始的情况
    //     当我们给c.name这样赋值，不会改变c的指向，而当c={}就已经改变了c的指向，他不在指向a

   */

/* //? =======================================================================================================
module.exports = {
    userName: '莉莉',
    sayHello() {
        console.log('Hello')
    },
}
exports.userName = '坤坤'
//打印：{ userName: '莉莉', sayHello: [Function: sayHello] }
 
        // 同样
        //  a={}//开始的对象
        //  b=a//module.exports
        //  c=a//exports
        //  这是最开始的情况
        // 当b不在指向a时,c指向a,b!=c了，b和c直接不指向同一对象

 
*/

/* //? =================================================================================================
module.exports.userName = '莉莉'
exports.userName = '坤坤'
//打印：{ userName: '坤坤'}

//他们没有直接赋值，而是给对象下面的属性赋值，此时他们指向同一空间 */

//? =================================================================================================
exports = {
    userName: '莉莉',
    sayHello() {
        console.log('Hello')
    },
}
module.exports = exports
module.exports.age = '18'
//打印：{ userName: '莉莉', sayHello: [Function: sayHello], age: '18' }

//  a={}//开始的对象
//  b=a//module.exports
//  c=a//exports
//  这是最开始的情况
// 接下来c={}，b=c,c.age='18',实际上还是指向同一对象，只是将指向的对象从a换成了c
